3692. Majority Frequency Characters

题目 3692. Majority Frequency Characters

image-f8bc6ef4

思路分析

代码实现

import java.util.HashMap;
import java.util.Map;

class Solution {
    public String majorityFrequencyGroup(String s) {
        // 1. 统计每个字符出现的频率 (char -> frequency)
        char[] arr = s.toCharArray();
        HashMap<Character, Integer> charCountMap = new HashMap<>();
        for (char c : arr) {
            charCountMap.put(c, charCountMap.getOrDefault(c, 0) + 1);
        }

        // 2. 统计每个频率组有多少个不同的字符 (frequency -> count of chars)
        HashMap<Integer, Integer> groupSizeMap = new HashMap<>();
        for (int freq : charCountMap.values()) {
            groupSizeMap.put(freq, groupSizeMap.getOrDefault(freq, 0) + 1);
        }

        // 3. 找出符合条件的最佳频率 (targetK)
        int bestK = 0;       // 记录最佳频率
        int maxGroupSize = 0; // 记录当前最大的组人数

        for (int k : groupSizeMap.keySet()) {
            int currentGroupSize = groupSizeMap.get(k);

            // 条件 A: 当前组的人数比之前的最大人数还多 -> 更新
            if (currentGroupSize > maxGroupSize) {
                maxGroupSize = currentGroupSize;
                bestK = k;
            } 
            // 条件 B: 当前组人数和最大人数一样多 (Tie),但频率 k 更大 -> 更新
            else if (currentGroupSize == maxGroupSize) {
                if (k > bestK) {
                    bestK = k;
                }
            }
        }

        // 4. 再次遍历,收集所有频率等于 bestK 的字符
        StringBuilder sb = new StringBuilder();
        for (char c : charCountMap.keySet()) {
            if (charCountMap.get(c) == bestK) {
                sb.append(c);
            }
        }

        return sb.toString();
    }
}
class Solution {
    public String majorityFrequencyGroup(String s) {
        // 1. 统计字符频率
        int[] charCounts = new int[26];
        for (char c : s.toCharArray()) {
            charCounts[c - 'a']++;
        }

        // 2. 统计频率组的大小 (Map: freq -> groupSize)
        // 注意:频率最大也就是字符串的长度,所以这里也可以用数组,但用Map更直观
        HashMap<Integer, Integer> groupSizeMap = new HashMap<>();
        for (int count : charCounts) {
            if (count > 0) {
                groupSizeMap.put(count, groupSizeMap.getOrDefault(count, 0) + 1);
            }
        }

        // 3. 找最佳频率
        int bestK = 0;
        int maxGroupSize = 0;
        
        for (int k : groupSizeMap.keySet()) {
            int size = groupSizeMap.get(k);
            if (size > maxGroupSize || (size == maxGroupSize && k > bestK)) {
                maxGroupSize = size;
                bestK = k;
            }
        }

        // 4. 构建结果
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 26; i++) {
            if (charCounts[i] == bestK) {
                sb.append((char)('a' + i));
            }
        }
        return sb.toString();
    }
}

同类题型

视频讲解